1, בנה מכונת מצבים לבעיה הבאה - נתון סטרים נתונים שכל הזמן מקבל 0 או 1, בכל רגע נתון צריך להדפיס האם הסטרים הנצבר מתחלק ב 5.
2, בניית מערכת למציאת מידע לפי רשימה שנתונה מראש.
תשובות
הוסף תשובה
|
לצפיה בתשובות
מרץ 2017
1, כגודל המספר שנרצה לחלק כך יהיה מספר המצבים במכונת המצבים הנל, כאאשר כל מצב מגדיר שארית חלוקה ב 5, עבור כל מספר נבדוק מה קורה אם מגיע אליו 0 או 1, לדוגמא מצב א' (מצב ראשוני) אם מגיע אליו 0 נשאר במצב זה מכיוון ש 0 מתחלק ב 5, אם יגיע 1 נעבור למצב ב' שמציין חלוקה ב 5 עם שארית 1 וכו.
2, נבנה טבלת HASH
מידע צריך להיכנס לתוך מערכת דרך אחת מ256 כניסות ולצאת ממנה דרך אחת מ128 יציאות.
המידע אינסופי וכל הזמן יש חזרה על הפעולה. הערך של הכניסה (0...255) עובר טרנספורמציה ע"י משחק באינדקס של הביטים כך שייווצר מספר המתאים לערך היציאה (0...127).
לדוגמא: המספר 1100,0000 (192) עובר טרנספורמציה לאינדקסים 5536247 והופך להיות 0000,0001 (אחרי הטרנספורמציה: ביט 0 הינו הביט ה-7 מהמספר המקורי, ביט 1 הוא ביט 4 מהמספר המקורי... וביט 7 חייב להיות 0 לצורך העניין)
השאלות:
1) בנה פונקציה/מתודת עבודה שעל ידיה נקבל ערך ונתרגם אותו לערך לאחר הטרנספורמציה בדרך המהירה והיעילה ביותר
2) כעת הטרנספורמציה משתנה כל יום, אך הפעולה ממשיכה כרגיל ואסור להפסיק את הפעולה באמצע. איזה מנגנון היה צריך לבנות על מנת להשאיר את הפעולה כמה שיותר יעילה?
תשובות
הוסף תשובה
|
לצפיה בתשובות
פברואר 2017
1) התשובה היעילה ביותר הינה ליצור look up table שהוא array של 256 איברים ולהשתמש בו. המסיח הוא לבנות פונקציה שבונה כל פעם מחדש את הערך החזרה.
2) מתחילים בתשובה כמו ב1, וברגע שמקבלים טרנספורמציה חדשה, מבצעים את הפעולה בפונקציה שבונה כל פעם מחדש את ערך החזרה, אך גם בונים LUT לטרנספורמציה החדשה (פעולת Learning). לאחר שהLUT החדש מתמלא, משתמשים בו במקום